﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace CoreEveprod
{
	public static class MarketPriceProvider
	{
		private static readonly MarketPrice Price = new MarketPrice();

		/// <summary>
		/// Pour une Id, nous checkons la présence dans le Dico des prix.
		/// </summary>
		/// <param name="idMateriel"></param>
		/// <returns></returns>
		public static bool CheckPrice(int idMateriel)
		{
			return (Price.ListPrix.ContainsKey(idMateriel));
		}

		/// <summary>
		/// Pour une ID, mettra à jour le prix.
		/// </summary>
		/// <param name="idMateriel"></param>
		/// <param name="prix"></param>
		public static void UpdatePrix(int idMateriel, decimal prix)
		{
			Price.ListPrix[idMateriel] = prix;
		}

		/// <summary>
		/// Nous ajoutons ce prix à la liste.
		/// </summary>
		/// <param name="idMateriel"></param>
		/// <param name="prix"></param>
		public static void AjoutPrix(int idMateriel, decimal prix)
		{
			Price.ListPrix.Add(idMateriel,prix);
		}

		/// <summary>
		/// Retourne le prix de l'ID materiel.
		/// </summary>
		/// <param name="idMateriel"></param>
		/// <returns></returns>
		public static decimal DonneLePrix(int idMateriel)
		{
			return Price.ListPrix[idMateriel];
		}

		/// <summary>
		/// Sauvegarde au format XML les prix sauvegarder en mémoire.
		/// </summary>
		public static void Sauvegarder(string nomFichier)
		{
			// Je crée le document.
			XDocument profilPrix = new XDocument(
				new XElement("PROFIL_PRIX"));

			// Ensuite j'ajoute chaque prix au document.
			foreach (var prix in Price.ListPrix)
			{
				XElement temp = new XElement("ITEM", new XAttribute("id", prix.Key), prix.Value);
				profilPrix.Element("PROFIL_PRIX").Add(temp);
			}

			// Je le sauvegarde.
			profilPrix.Save(nomFichier + ".xml");
		}

		/// <summary>
		/// Charge en mémoire (DesignPattern) la liste des prix présente dans le fichier XML.
		/// </summary>
		/// <param name="listPrix"></param>
		public static void ChargerPrix(XElement listPrix)
		{
			// Je récupère toutes les balises ITEM.
			var list = listPrix.Elements("ITEM");

			// Pour chaque ITEM, je prends l'id de l'item, et son prix associé.
			foreach (var item in list)
			{
				Price.ListPrix.Add((int)item.Attribute("id"),Convert.ToDecimal(item.Value));
			}
		}

		/// <summary>
		/// Vide la liste de prix qui est en mémoire.
		/// </summary>
		public static void ClearListPrix()
		{
			Price.ListPrix.Clear();
		}

	}
}
